package com.lq.filestudy.controller;

//import com.lq.filestudy.listenner.ExcelDataListener;
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.lq.filestudy.utils.EasyExcelUtil;
import com.lq.filestudy.utils.ExcelUtil;
import com.lq.filestudy.utils.FileZipCompressUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@RestController
@RequestMapping("/excel")
@Slf4j
public class ExcelController {
//
//    @GetMapping("/read")
//    public void simpleRead() {
//        // 有个很重要的点 DemoDataListener 不能被spring管理，要每次读取excel都要new,然后里面用到spring可以构造方法传进去
//        // 写法1：
//        String fileName = "demo1.xlsx";
//        // 这里 需要指定读用哪个class去读，然后读取第一个sheet，文件流会自动关闭
//        EasyExcel.read(fileName, DemoData.class, new ExcelDataListener()).sheet().doRead();
//
//        // 写法2：
//        try (ExcelReader excelReader = EasyExcel.read(fileName, DemoData.class, new ExcelDataListener()).build()) {
//            // 构建一个sheet 这里可以指定名字或者no
//            ReadSheet readSheet = EasyExcel.readSheet(0).build();
//            // 读取一个sheet
//            excelReader.read(readSheet);
//        }
//    }
//
//
//    @GetMapping("/write")
//    public void simpleWrite() {
//        // 写法1 JDK8+
//        // since: 3.0.0-beta1
//        String fileName = "demo" + System.currentTimeMillis() + ".xlsx";
//        // 这里 需要指定写用哪个class去写，然后写到第一个sheet，名字为模板 然后文件流会自动关闭
//        EasyExcel.write(fileName, DemoData.class)
//                .sheet("模板")
//                .doWrite(() -> {
//                    // 分页查询数据
//                    return data();
//                });
//
//        // 写法2
//        fileName = "demo" + System.currentTimeMillis() + ".xlsx";
//        // 这里 需要指定写用哪个class去写，然后写到第一个sheet，名字为模板 然后文件流会自动关闭
//        EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());
//
//    }
//
//    private List<DemoData> data() {
//        List<DemoData> list = new ArrayList<DemoData>();
//        for (int i = 0; i < 10; i++) {
////            DemoData data = new DemoData();
////            data.setString("字符串" + i);
////            data.setDate(new Date());
////            data.setDoubleData(0.56);
////            list.add(data);
//        }
//        return list;
//    }
//
//

    @Autowired
    private EasyExcelUtil easyExcelUtil;


    /**
     * 获取Excel表头
     */
    @PostMapping("/getSheetTitles")
    public List<String> getSheetTitles(MultipartFile file) throws IOException {

        if (file == null) {
            throw new RuntimeException("文件为空，上传失败");
        }

        final String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().indexOf("."));
        // 使用UUID生成新的文件名
        String newFileName = UUID.randomUUID() + suffix;
        //构造文件路径

        String path = null;

        path =  "C:\\data\\client\\zip\\"+"/%s";


        String url = String.format(path, newFileName);

        //开始存储

        File temp = new File(url);

        // 检查目录是否存在
        File dir = new File(url);
        if (!dir.exists()) {
            dir.mkdirs();
        }

        // 检查该文件是否已经存在，存在则删除
        if (temp.exists()) {
            temp.delete();
        }

        // 创建一个新文件
        temp.createNewFile();

        // 将数据写入文件
        file.transferTo(temp);


        FileZipCompressUtils.unZippress(temp.toPath().toString(), "C:\\data\\client\\");

        //拿到文件夹地址

        List<String> list = null;
        Workbook workbook = ExcelUtil.getWorkbook("C:\\data\\client\\deno\\demo.xlsx");
        if (workbook != null) {
              list = ExcelUtil.getSheetTitles(workbook);
            System.out.println("Excel表头：" + list);
            return list;
        }
        //制作 model表
        //有值 就存 1
        Integer one = 1;
         Map<String,Integer> map =new HashMap();
      //  int size = list.size();
        list.stream().forEach(key->{
            map.put(key,one);
        });
       String modelJson = JSON.toJSONString(map);

       Map<String,Integer> mapObject = JSON.parseObject(modelJson,Map.class);

        //3、读取 excel数据 存储到 mysql


        return list;
    }




        @GetMapping("easyExcelRead1")
        public List<Map<Integer, String>> easyExcelRead1(){
            List<Map<Integer, String>> list = easyExcelUtil.excelReadFilePath("C:\\data\\client\\deno\\demo.xlsx", 1);
            list.forEach(System.out::println);
            return list;
        }










}



